
package logica;


import java.io.IOException;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

/**
 * @author Irene
 * Esta clase es la encargada de recorrer el XML y formar los arreglos con la diferente
 * informacion que esta contenido en el mismo
 */
public class LeerXmlExterno {

   private Element root;
   
 
   public LeerXmlExterno(String fileLocation) {
      try {
         SAXBuilder builder = new SAXBuilder(false);
         Document doc = null;
         doc = builder.build(fileLocation);
         root = doc.getRootElement();
      } catch (JDOMException ex) {
         System.out.println("No se pudo iniciar la operacion por: " + ex.getMessage());
      } catch (IOException ex) {
         System.out.println("No se pudo iniciar la operacion por: " + ex.getMessage());
      }
   }


   private ObjetoXML eventoToObject(Element element) throws ParseException {
      ObjetoXML evento = new ObjetoXML();
      
      evento.setId(Integer.parseInt(element.getChildText("id")));
      evento.setNombre(element.getChildText("nombre"));
      evento.setFecha_inicio(element.getChildText("fecha"));
      evento.setId_categoria(Integer.parseInt(element.getChildText("idcat")));
      
      return evento;
   }

  
   public ListaObjetoXML todosLosEventos() {
      ListaObjetoXML resultado = new ListaObjetoXML();
      for (Object it : root.getChild("eventos").getChildren()) {
         Element xmlElem = (Element) it;
         try {
            resultado.AgregarObjeto(eventoToObject(xmlElem));
         } catch (ParseException ex) {
            System.out.println(ex.getMessage());
         }
      }
      return resultado;
   }


   private ParticipanteXML participanteToObject(Element element) throws ParseException {
      ParticipanteXML participante = new ParticipanteXML();

      participante.setNombre(element.getChildText("nombrepart"));
      participante.setRelacion_pago(element.getChildText("tipopagop"));
      participante.setApuesta_maxima(element.getChildText("topeapuesta"));
      participante.setId_participante(Integer.parseInt(element.getChildText("idpart")));
      participante.setId_evento(Integer.parseInt(element.getChildText("ideve")));

      return participante;
   }

   public ListaParticipanteXML todosLosParticipantes() {
      ListaParticipanteXML resultado = new ListaParticipanteXML();
      for (Object it : root.getChild("participantes").getChildren()) {
         Element xmlElem = (Element) it;
         try {
            resultado.AgregarCategroia(participanteToObject(xmlElem));

         } catch (ParseException ex) {
            System.out.println(ex.getMessage());
         }
      }
      return resultado;
   }
   

//   private Administrador administradorToObject(Element element) throws ParseException {
//      Administrador administrador = new Administrador();
//
//      administrador.setAdmCedula(Integer.parseInt(element.getChildText("cedulaadm")));
//      administrador.setAdmContrasena(element.getChildText("contrasenaadm"));
//      administrador.setAdmLogin(element.getChildText("loginadm"));
//
//      return administrador;
//   }
//
//   public ArrayList<Administrador> todosLosAdministradores() {
//      ArrayList<Administrador> resultado = new ArrayList<Administrador>();
//      for (Object it : root.getChild("administradores").getChildren()) {
//         Element xmlElem = (Element) it;
//         try {
//            resultado.add(administradorToObject(xmlElem));
//
//         } catch (ParseException ex) {
//            System.out.println(ex.getMessage());
//         }
//      }
//      return resultado;
//   }
   
   
   private CategoriaXML categoriaToObject(Element element) throws ParseException {
      CategoriaXML categoria = new CategoriaXML();
      
      categoria.setId(Integer.parseInt(element.getChildText("catid")));
      categoria.setNombre(element.getChildText("catnombre"));
      
      return categoria;
   }
   
 
   public ListaCategoriaXML todasLasCategorias() {
      ListaCategoriaXML resultado = new ListaCategoriaXML();
      for (Object it : root.getChild("categorias").getChildren()) {
         Element xmlElem = (Element) it;
         try {
            resultado.AgregarCategroia(categoriaToObject(xmlElem));

         } catch (ParseException ex) {
            System.out.println(ex.getMessage());
         }
      }
      return resultado;
   }
   
   
  
   private MaquinaXML maquinaToObject(Element element) throws ParseException {
      MaquinaXML maquina = new MaquinaXML();

      maquina.setId(Integer.parseInt(element.getChildText("maqid")));
      maquina.setStatus(element.getChildText("maqstatus"));
       
      return maquina;
   }
   

 
   public ListaMaquinaXML todasLasMaquinas() {
      ListaMaquinaXML resultado = new ListaMaquinaXML();
      for (Object it : root.getChild("maquinas").getChildren()) {
         Element xmlElem = (Element) it;
         try {
            resultado.AgregarMaquina(maquinaToObject(xmlElem));

         } catch (ParseException ex) {
            System.out.println(ex.getMessage());
         }
      }
      return resultado;
   }
   
   
   
   
   

   
    public void obtenerArchivo(String fileLocation) {
        try {
            LeerXmlExterno xml = new LeerXmlExterno(fileLocation);
            ListaObjetoXML evento = new ListaObjetoXML();
            evento = xml.todosLosEventos();
            evento.insertarObjetoBd();
            ListaParticipanteXML participante = new ListaParticipanteXML();
            participante = xml.todosLosParticipantes();
            participante.insertarparticipanteBd();
            ListaCategoriaXML categoria = new ListaCategoriaXML();
            categoria = xml.todasLasCategorias();
            categoria.insertarCategoriaBd();
            ListaMaquinaXML maquina = new ListaMaquinaXML();
            maquina = xml.todasLasMaquinas();
            maquina.updatemaquinaBd();
        } catch (SQLException ex) {
            Logger.getLogger(LeerXmlExterno.class.getName()).log(Level.SEVERE, null, ex);
        }



  
   }



}
